<MDCheckbox>
    _current_color:
        ( \
        ( \
        self.theme_cls.primaryColor \
        if not self.color_active else self.color_active \
        ) \
        if self.active else \
        ( \
        self.theme_cls.onSurfaceVariantColor \
        if not self.color_inactive else self.color_inactive \
        ) \
        ) \
        if not self.disabled else \
        ( \
        self.theme_cls.onSurfaceColor[:-1] \
        + [self.checkbox_opacity_value_disabled_container] \
        if not self.color_disabled else self.color_disabled \
        )

    canvas:
        Color:
            rgba: self._current_color
        Rectangle:
            texture: self.texture
            size: self.texture_size
            pos:
                int(self.center_x - self.texture_size[0] / 2.), \
                int(self.center_y - self.texture_size[1] / 2.)

    # FIXME: Move to `kivymd/uix/behaviors/state_layer_behavior.py`
    canvas.after:
        # Clear
        Color
            rgba: self.state_layer_color
        RoundedRectangle:
            size: self.width + dp(20), self.height + dp(20)
            pos: self.x - self.width / 2 + dp(2), self.y - self.height / 2 + dp(2)
            radius: [(self.width + dp(20)) / 2, ]

    theme_text_color: "Custom"
    text_color: self._current_color
    halign: "center"
    valign: "middle"
    size_hint: None, None
    size: "22dp", "22dp"


<Thumb>
    radius: self.width / 2
    ripple_scale: 2

    ThumbIcon:
        id: icon
        font_size: "16sp"
        pos_hint: {"center_x": .5, "center_y": .5}
        theme_text_color: "Custom"
        text_color:
            ( \
            ( \
            ( \
            root.parent.icon_active_color \
            if root.parent.icon_active_color \
            else self.theme_cls.onPrimaryContainerColor \
            ) \
            if root.parent.icon_active and root.parent.active else \
            ( \
            root.parent.icon_inactive_color \
            if root.parent.icon_inactive_color \
            else self.theme_cls.surfaceContainerHighestColor \
            ) \
            ) \
            if not root.parent.disabled else \
            ( \
            self.theme_cls.onSurfaceColor[:-1] \
            + [root.parent.switch_opacity_value_disabled_icon] \
            if root.parent.icon_active else \
            self.theme_cls.surfaceContainerHighestColor[:-1] \
            + [root.parent.switch_opacity_value_disabled_icon] \
            ) \
            ) \
            if root.parent else self.theme_cls.transparentColor


<MDSwitch>
    size_hint: None, None
    size: dp(52), dp(32)
    radius: [self.height / 2, ]
    md_bg_color:
        ( \
        self.track_color_disabled \
        if self.track_color_disabled else \
        ( \
        self.theme_cls.onSurfaceColor[:-1] \
        + [self.switch_opacity_value_disabled_container] \
        if self.active else self.theme_cls.surfaceContainerHighestColor[:-1] \
        + [self.switch_opacity_value_disabled_container] \
        ) \
        ) \
        if self.disabled else \
        ( \
        ( \
        self.track_color_active \
        if self.track_color_active else \
        self.theme_cls.primaryColor \
        ) \
        if self.active else \
        (self.track_color_inactive \
        if self.track_color_inactive else \
        self.theme_cls.surfaceContainerHighestColor \
        ) \
        )
    line_color:
        ( \
        ( \
        self.theme_cls.outlineColor if not self.active else self.md_bg_color
        ) \
        if not self.disabled else \
        self.theme_cls.onSurfaceColor[:-1] \
        + [self.switch_opacity_value_disabled_line] \
        ) \
        if self.theme_line_color == "Primary" else \
        self._line_color if not self.disabled else \
        ( \
        self.line_color_disabled \
        if self.line_color_disabled else \
        self._line_color \
        )

    Thumb:
        id: thumb
        size_hint: None, None
        size: dp(24), dp(24)
        _no_ripple_effect: not root.ripple_effect
        md_bg_color:
            ( \
            root.thumb_color_disabled \
            if root.thumb_color_disabled else \
            ( \
            root.theme_cls.surfaceColor \
            if root.active else root.theme_cls.onSurfaceColor[:-1] \
            + [root.switch_thumb_opacity_value_disabled_container] \
            ) \
            ) \
            if root.disabled else \
            ( \
            (root.thumb_color_active \
            if root.thumb_color_active else \
            root.theme_cls.onPrimaryColor \
            ) \
            if root.active else \
            ( \
            root.thumb_color_inactive \
            if root.thumb_color_inactive else \
            self.theme_cls.outlineColor \
            ) \
            )
        on_touch_down:
            if self.collide_point(*args[1].pos) and not root.disabled: \
            root.on_thumb_down()
        on_touch_up:
            if self.collide_point(*args[1].pos) and not root.disabled: \
            setattr(root, "active", not root.active)
        pos:
            root.pos[0] + (self.width / 2) + root._thumb_pos[0] \
            + dp(6 if root.icon_inactive else 0), \
            root.pos[1] + (root.height / 2 - self.height / 2) + root._thumb_pos[1]